package com.dylearn.test;


import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dylearn.Application;
import com.dylearn.domain.Book;
import com.dylearn.mapper.BookMapper;
import com.dylearn.test.config.getMs;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.annotation.Import;
import org.springframework.test.annotation.Rollback;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

//测试中 获取临时变量 --一共两个方法 properties 和 args -这个是命令行模式 优先级最高 但有一个问题 就是不能识别空格 -特别注意规范
@SpringBootTest(classes = Application.class,properties = {"server.port = 888"},args = {"--server.port=8089"})
@Import(getMs.class) //创建测试的配置类之后，在这里使用对应注解进行导入
@Transactional //事务回滚 --在测试中，使用这个，任何对数据库的操作都会正常运行 --但不会留下数据
@Rollback(value = true) //控制事务回滚 true and fasle
public class test {

    @Autowired
    String getMs;//最后进行 自动导入 即可使用

    @Value("${server.port}")
    String port;

    @Autowired
    BookMapper bookMapper;

    @Test
    void getById() {
        System.out.println("msg => " + getMs); //打印 bean msg
        System.out.println("port = " + port);
        Book book = new Book();

        book.setName("测试书籍123456");
        book.setType("测试书籍123456");
        book.setDescription("测试书籍123456");
        ;
        System.out.println("bookMapper ===> "+bookMapper.insert(book));
    }

    @Test
    void getByPage() {
        IPage page = new Page(1,5);
        bookMapper.selectPage(page,null);
        //总体页数
        System.out.println("总体页数 page.getPages() ====> "+page.getPages());

        //当前页数
        System.out.println("当前页数 page.getCurrent() =====> "+page.getCurrent());

        //当前页面数据量大小
        System.out.println("当前页面数据量大小 page.getSize() =====> "+page.getSize());

        //总数据量
        System.out.println("总数据量 page.getTotal() =====> "+page.getTotal());

        //当前页面的数据
        System.out.println("page.getRecords() =====> "+page.getRecords());
    }

    @Test
    void getBy() {
        QueryWrapper qw = new QueryWrapper();
        //这里就是like，针对name字段 条件是 1
        qw.like("name","1");
        List<Book> list =  bookMapper.selectList(qw);
        System.out.println("bookMapper.selectList(qw) =========> "+ list);

    }

    @Test
    void getBy2() {
        String name = "1";
        //这个是校验 条件查询条件的查询语句 --这块必须得添加上类型的选择
        LambdaQueryWrapper<Book> lqw = new LambdaQueryWrapper<Book>();
        //这个是升级版本的查询
        //这里有条件 condition true or false ，赋值 getName --如果不添加上类型Book，那么这里会报错 ，值 name
        lqw.like(name != null,Book::getName,name);
        List<Book> list =  bookMapper.selectList(lqw);
        System.out.println("bookMapper.selectList(lqw) =========> "+ list);
    }
}


